今天要來說說foreach
foreach敘述和for敘述的功能一樣,兩者的差異在foreach不用給予迴圈正確的初值、條件和終值,他會如下面語法自動將指定集合物件(如陣列)中的元素逐一指定給變數,帶入回圈內處理,一直到所有元素都處理完畢才離開迴圈,繼續執行接在foreach後面的敘述。語法如下:
foreach(資料型態 變數 in 集合物件)
{
//敘述區域
}
int[] tail = new int[]{10,20,30,40,50};
int sum = 0;
foreach(int height in tail)
{
sum += height;
}
那我們來做個練習吧~~
我們做個可輸入自訂人數的身高,然後算出平均身高的程式。
int i;
double sum = 0;
Console.Write("請輸入總人數:");
int num = int.Parse(Console.ReadLine()); //輸入值轉整數指定給num
Console.WriteLine();
double[] tall = new double[num]; //建立tall倍精度陣列存放每位的身高
for (i = 0; i <= tall.GetUpperBound(0); i++)
{
Console.Write("請輸入第{0}位身高(公分):", i + 1);
tall[i] = double.Parse(Console.ReadLine()); //輸入身高逐一存入陣列
}
foreach (double height in tall) //計算總人數的身高加總
sum += height; //將所有陣列元素依序加總指定給sum
Console.WriteLine("\n===" + i.ToString("#") + "位平均身高:" + (sum / num).ToString("00.00")); //顯示平均身高
再來是陣列的排序和搜尋
當要對陣列中的陣列元素做遞增遞減排序時,一般都是使用雙層for來執行,對初學者而言是大工程。還好 .NET Framework類別資料庫提供System.Array類別的靜態方法來解決這問題,只要一行程式就可以輕鬆完成陣列的排序、反轉、搜尋和清除資料的工作。下表是Array類別中常用的靜態方法:
Array類別靜態方法 | 功能 |
---|---|
BinarySearch | [語法] int n = Array.BinarySearch(陣列名稱,欲搜尋資料); [說明] 透過二分搜尋法搜尋資料是否存放在陣列中,使用此方法前必須事先使用Array.Sort()方法將陣列做遞增排序才可使用,適用於搜尋資料量較大的陣列,若找到資料傳回該陣列元素的索引值,若沒有傳回-1 |
Clear | [語法] Array.Clear(陣列名稱,起始註標,刪除個數); [說明] 將陣列中指定範圍內陣列元素內的內容清除 |
IndexOf | [語法] int n = Array.IndexOf(陣列名稱,欲搜尋資料); [說明] 搜尋資料是否存放在陣列中。若有找到資料會傳回該陣列元素索引值,若沒有找到資料則傳回-1 |
Sort方法 | [語法1] Array.Sort(陣列名稱); [說明1] 對指定的一維陣列物件遞增排序 [語法2] Array.Sort(陣列名稱1,陣列名稱2); [說明2] 依據第一個引數陣列的索引值遞增來排序,第二引數陣列的對應索引值亦跟著移動 [語法3] Array.Sort(陣列名稱,起始註標,排序長度); [說明3] 將指定一維陣列由指定起始陣列註標開始取指定長度的陣列元素進行遞增排序 |
Reverse方法 | [語法1] Array.Reverse(陣列名稱); [語法2] Array.Reverse陣列名稱,起始註標,排序長度); [說明] 將指定一維陣列整個或由指定註標後面多少個陣列元素進行反轉。若想遞減排序,可以先執行Array.Sort()進行遞增後再執行Array.Reverse()反轉陣列,則該陣列就會變成遞減 |
GetEnumerator方法 | 傳回Array的IEnumerator |
陣列到這邊就結束啦~~大家掰掰~